package com.and9.mchen.mcmusic.dao;

import com.and9.mchen.mcmusic.entity.Statistics;
import com.and9.mchen.mcmusic.exception.DaoException;

/**
 * 
 * @author MC
 * @version 1.0
 */
public interface IStatisticsDao {

	
	String[] BASEPROPERTYNAMES={"clickCount", "supprotCount", "nonSupportCount", "isStick"};
	
	/**
	 * <p>
	 * 如果statistics对象为null<br/>
	 * 则返回-1
	 * </p>
	 * <p>
	 * 保存对象到数据库的时候，statistics的id为null或者0即可<br/>
	 * 保存对象时，propertyNames只要传null即可<br/>
	 * </p>
	 * <p>
	 * 更新对象的时候，不准更新statistics父类的属性<br/>
	 * 如果存在父类属性，则会修改propertyNames属性为song属性
	 * </p> 
	 * @param statistics
	 * @param propertyNames
	 * @return 
	 * 返回创建或者更新<tt>statistics</tt>的成功次数 
	 * @throws DaoException
	 */
	int createOrUpdateStatistics(Statistics statistics, String... propertyNames) throws DaoException;
	
	/**
	 * <p>
	 * 如果id <= 0</br>
	 * 则返回-1
	 * </p>
	 * @param id
	 * @return 
	 * 返回根据statistics的<tt>id</tt>删除statistics的成功次数
	 * @throws DaoException
	 */
	int deleteStatisticsByStatisticsId(long id) throws DaoException;
	
	/**
	 * <p>
	 * 如果id <= 0 、查找结果statistics为null 或者 statistics 的 id=1<br/>
	 * 则返回null
	 * </p>
	 * @param id
	 * @return
	 * 根据song的<tt>id</tt>查找statistics
	 * @throws DaoException
	 */
	Statistics getsStatisticsBySongId(long id) throws DaoException;
	
	/**
	 * <p>
	 * 如果id <= 0 、查找结果statistics为null 或者 statistics 的 id=1<br/>
	 * 则返回null
	 * </p>
	 * @param id
	 * @return
	 * 根据album的<tt>id</tt>查找statistics
	 * @throws DaoException
	 */
	Statistics getStatisticsByAlbumId(long id) throws DaoException;
	
	/**
	 * <p>
	 * 如果id <= 0 、查找结果statistics为null 或者 statistics 的 id=1<br/>
	 * 则返回null
	 * </p>
	 * @param id
	 * @return
	 * 根据singer的<tt>id</tt>查找statistics
	 * @throws DaoException
	 */
	Statistics getStatisticsBySingerId(long id) throws DaoException;
	
	/**
	 * <p>
	 * 如果id <= 0<br/>
	 * 则返回null
	 * </p>
	 * @param id
	 * @return 
	 * 根据statistics的<tt>id</tt>查找statistics<br/>
	 * 查找失败返回null
	 * @throws DaoException
	 */
	Statistics getStatisticsByStatisticsId(long id) throws DaoException;
	
	/**
	 * <p>
	 * 如果uniqueId 为null<br/>
	 * 则返回null
	 * </p>
	 * @param uniqueId
	 * @return
	 * 根据statistics的<tt>uniqueId</tt>查找statistics<br/>
	 * 查找失败返回null
	 * @throws DaoException
	 */
	Statistics getStatisticsByStatisticsUniqueId(String uniqueId) throws DaoException;
	
}
